import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置字体为 SimHei（黑体），避免中文乱码
rcParams['font.sans-serif'] = ['SimHei']  # 设置默认字体
rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 加载数据
def load_data(file_path):
    sheets = ['材料1', '材料2', '材料3', '材料4']
    df_list = []
    for sheet in sheets:
        df = pd.read_excel(file_path, sheet_name=sheet)
        df['Material'] = sheet
        df_list.append(df)
    full_df = pd.concat(df_list, ignore_index=True)
    return full_df

# 绘制各材料的磁通密度分布特征图
def plot_magnetic_density_distribution(df):
    # 获取所有材料名称
    materials = df['Material'].unique()

    # 创建 2x2 子图布局
    fig, axs = plt.subplots(2, 2, figsize=(14, 12))  # 增加图像大小
    axs = axs.flatten()  # 将 2x2 的轴平铺为一维列表

    for i, material in enumerate(materials):
        # 筛选特定材料的数据
        subset = df[df['Material'] == material]

        if subset.empty:
            print(f"没有找到 {material} 的数据")
            continue

        # 提取所有磁通密度数据（第5到1029列）
        magnetic_density_values = subset.iloc[:, 4:1028].values.flatten()

        # 绘制直方图
        axs[i].hist(magnetic_density_values, bins=50, color='steelblue', alpha=0.7)
        axs[i].set_title(f'{material} 磁通密度分布', fontsize=14)  # 调整标题字体大小
        axs[i].set_xlabel('磁通密度 (T)', fontsize=12)  # 调整x轴标签字体大小
        axs[i].set_ylabel('频数', fontsize=12)  # 调整y轴标签字体大小
        axs[i].tick_params(axis='both', which='major', labelsize=10)  # 调整刻度标签字体大小
        axs[i].grid(True)

    # 调整子图间距，避免文字重叠
    plt.tight_layout(pad=3.0, w_pad=2.0, h_pad=2.0)
    plt.show()

# 主程序
file_path = '附件一（训练集）.xlsx'
df = load_data(file_path)

# 绘制各材料的磁通密度分布特征图
plot_magnetic_density_distribution(df)
